1

mysql 事务如果出现嵌套会怎么样了?在MVC 的开发模式下, 大伙经常会在model层 封装事务,如果 model 层有互相调用的话,很容易出现事务嵌套,那么事务嵌套会出现什么问题呢? 那么应该如何设计结构避免出现事务嵌套么?本次着重解决第一个问题。

时序 事务一 事务二
1 start transaction;
2 insert into test set id = 2;
3 select * from test;
4 start transaction;
5 select * from test;

命令行按照以上时序执行的时候会发现,时序3 的select 没有id = 2 的数据; 但是 时序 5 的时候出现了 id = 2的数据;因此可以初步断定,事务嵌套的时候,start transaction 具有类似于commit的提交功能。实时确实如此,参照MySQL嵌套事务的讨论; 不仅 start transaction 具有引起 commit 提交的功能,下列语句同样会引起commit


ALTER FUNCTION  
ALTER PROCEDURE  
ALTER TABLE  
BEGIN  
CREATE DATABASE  
CREATE FUNCTION  
CREATE INDEX  
CREATE PROCEDURE  
CREATE TABLE  
DROP DATABASE  
DROP FUNCTION  
DROP INDEX  
DROP PROCEDURE  
DROP TABLE  
UNLOCK TABLES  
LOAD MASTER DATA  
LOCK TABLES  
RENAME TABLE  
TRUNCATE TABLE  
SET AUTOCOMMIT=1  
START TRANSACTION 

参考文献:

MySQL嵌套事务的讨论


曾小吉
56 声望2 粉丝